home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / examples / wizard / wizard.cpp.z / wizard.cpp
Encoding:
C/C++ Source or Header  |  2002-04-08  |  7.0 KB  |  228 lines

  1. /****************************************************************************
  2. ** $Id$
  3. **
  4. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  5. **
  6. ** This file is part of an example program for Qt.  This example
  7. ** program may be used, distributed and modified without limitation.
  8. **
  9. *****************************************************************************/
  10.  
  11. #include "wizard.h"
  12.  
  13. #include <qwidget.h>
  14. #include <qhbox.h>
  15. #include <qvbox.h>
  16. #include <qlabel.h>
  17. #include <qlineedit.h>
  18. #include <qpushbutton.h>
  19. #include <qvalidator.h>
  20. #include <qapplication.h>
  21.  
  22. Wizard::Wizard( QWidget *parent, const char *name )
  23.     : QWizard( parent, name, TRUE )
  24. {
  25.     setupPage1();
  26.     setupPage2();
  27.     setupPage3();
  28.  
  29.     key->setFocus();
  30. }
  31.  
  32. void Wizard::setupPage1()
  33. {
  34.     page1 = new QHBox( this );
  35.     page1->setSpacing(8);
  36.  
  37.     QLabel *info = new QLabel( page1 );
  38.     info->setPalette( yellow );
  39.     info->setText( "Enter your personal\n"
  40.                    "key here.\n\n"
  41.                    "Your personal key\n"
  42.                    "consists of 4 digits" );
  43.     info->setIndent( 8 );
  44.     info->setMaximumWidth( info->sizeHint().width() );
  45.  
  46.     QVBox *page = new QVBox( page1 );
  47.  
  48.     QHBox *row1 = new QHBox( page );
  49.  
  50.     (void)new QLabel( "Key:", row1 );
  51.  
  52.     key = new QLineEdit( row1 );
  53.     key->setMaxLength( 4 );
  54.     key->setValidator( new QIntValidator( 1000, 9999, key ) );
  55.  
  56.     connect( key, SIGNAL( textChanged( const QString & ) ),
  57.          this, SLOT( keyChanged( const QString & ) ) );
  58.  
  59.     addPage( page1, "Personal Key" );
  60.  
  61.     setNextEnabled( page1, FALSE );
  62.     setHelpEnabled( page1, FALSE );
  63. }
  64.  
  65. void Wizard::setupPage2()
  66. {
  67.     page2 = new QHBox( this );
  68.     page2->setSpacing(8);
  69.  
  70.     QLabel *info = new QLabel( page2 );
  71.     info->setPalette( yellow );
  72.     info->setText( "\n"
  73.                    "  Enter your personal  \n"
  74.                    "  data here.  \n\n"
  75.                    "  The required fields are  \n"
  76.                    "  First Name, Last Name \n"
  77.                    "  and E-Mail.  \n" );
  78.     info->setIndent(8);
  79.     info->setMaximumWidth( info->sizeHint().width() );
  80.  
  81.     QVBox *page = new QVBox( page2 );
  82.  
  83.     QHBox *row1 = new QHBox( page );
  84.     QHBox *row2 = new QHBox( page );
  85.     QHBox *row3 = new QHBox( page );
  86.     QHBox *row4 = new QHBox( page );
  87.     QHBox *row5 = new QHBox( page );
  88.  
  89.     QLabel *label1 = new QLabel( " First Name: ", row1 );
  90.     label1->setAlignment( Qt::AlignVCenter );
  91.     QLabel *label2 = new QLabel( " Last Name: ", row2 );
  92.     label2->setAlignment( Qt::AlignVCenter );
  93.     QLabel *label3 = new QLabel( " Address: ", row3 );
  94.     label3->setAlignment( Qt::AlignVCenter );
  95.     QLabel *label4 = new QLabel( " Phone Number: ", row4 );
  96.     label4->setAlignment( Qt::AlignVCenter );
  97.     QLabel *label5 = new QLabel( " E-Mail: ", row5 );
  98.     label5->setAlignment( Qt::AlignVCenter );
  99.  
  100.     label1->setMinimumWidth( label4->sizeHint().width() );
  101.     label2->setMinimumWidth( label4->sizeHint().width() );
  102.     label3->setMinimumWidth( label4->sizeHint().width() );
  103.     label4->setMinimumWidth( label4->sizeHint().width() );
  104.     label5->setMinimumWidth( label4->sizeHint().width() );
  105.  
  106.     firstName = new QLineEdit( row1 );
  107.     lastName = new QLineEdit( row2 );
  108.     address = new QLineEdit( row3 );
  109.     phone = new QLineEdit( row4 );
  110.     email = new QLineEdit( row5 );
  111.  
  112.     connect( firstName, SIGNAL( textChanged( const QString & ) ),
  113.          this, SLOT( dataChanged( const QString & ) ) );
  114.     connect( lastName, SIGNAL( textChanged( const QString & ) ),
  115.          this, SLOT( dataChanged( const QString & ) ) );
  116.     connect( email, SIGNAL( textChanged( const QString & ) ),
  117.          this, SLOT( dataChanged( const QString & ) ) );
  118.  
  119.     addPage( page2, "Personal Data" );
  120.  
  121.     setHelpEnabled( page2, FALSE );
  122. }
  123.  
  124. void Wizard::setupPage3()
  125. {
  126.     page3 = new QHBox( this );
  127.     page3->setSpacing(8);
  128.  
  129.     QLabel *info = new QLabel( page3 );
  130.     info->setPalette( yellow );
  131.     info->setText( "\n"
  132.                    "  Look here to see of  \n"
  133.                    "  the data you entered  \n"
  134.                    "  is correct. To confirm,  \n"
  135.                    "  press the [Finish] button  \n"
  136.                    "  else go back to correct  \n"
  137.                    "  mistakes." );
  138.     info->setIndent(8);
  139.     info->setAlignment( AlignTop|AlignLeft );
  140.     info->setMaximumWidth( info->sizeHint().width() );
  141.  
  142.     QVBox *page = new QVBox( page3 );
  143.  
  144.     QHBox *row1 = new QHBox( page );
  145.     QHBox *row2 = new QHBox( page );
  146.     QHBox *row3 = new QHBox( page );
  147.     QHBox *row4 = new QHBox( page );
  148.     QHBox *row5 = new QHBox( page );
  149.     QHBox *row6 = new QHBox( page );
  150.  
  151.     QLabel *label1 = new QLabel( " Personal Key: ", row1 );
  152.     label1->setAlignment( Qt::AlignVCenter );
  153.     QLabel *label2 = new QLabel( " First Name: ", row2 );
  154.     label2->setAlignment( Qt::AlignVCenter );
  155.     QLabel *label3 = new QLabel( " Last Name: ", row3 );
  156.     label3->setAlignment( Qt::AlignVCenter );
  157.     QLabel *label4 = new QLabel( " Address: ", row4 );
  158.     label4->setAlignment( Qt::AlignVCenter );
  159.     QLabel *label5 = new QLabel( " Phone Number: ", row5 );
  160.     label5->setAlignment( Qt::AlignVCenter );
  161.     QLabel *label6 = new QLabel( " E-Mail: ", row6 );
  162.     label6->setAlignment( Qt::AlignVCenter );
  163.  
  164.     label1->setMinimumWidth( label1->sizeHint().width() );
  165.     label2->setMinimumWidth( label1->sizeHint().width() );
  166.     label3->setMinimumWidth( label1->sizeHint().width() );
  167.     label4->setMinimumWidth( label1->sizeHint().width() );
  168.     label5->setMinimumWidth( label1->sizeHint().width() );
  169.     label6->setMinimumWidth( label1->sizeHint().width() );
  170.  
  171.     lKey = new QLabel( row1 );
  172.     lFirstName = new QLabel( row2 );
  173.     lLastName = new QLabel( row3 );
  174.     lAddress = new QLabel( row4 );
  175.     lPhone = new QLabel( row5 );
  176.     lEmail = new QLabel( row6 );
  177.  
  178.     addPage( page3, "Finish" );
  179.  
  180.     setFinishEnabled( page3, TRUE );
  181.     setHelpEnabled( page3, FALSE );
  182. }
  183.  
  184. void Wizard::showPage( QWidget* page )
  185. {
  186.     if ( page == page1 ) {
  187.     } else if ( page == page2 ) {
  188.     } else if ( page == page3 ) {
  189.         lKey->setText( key->text() );
  190.         lFirstName->setText( firstName->text() );
  191.         lLastName->setText( lastName->text() );
  192.         lAddress->setText( address->text() );
  193.         lPhone->setText( phone->text() );
  194.         lEmail->setText( email->text() );
  195.     }
  196.  
  197.     QWizard::showPage(page);
  198.  
  199.     if ( page == page1 ) {
  200.         keyChanged( key->text() );
  201.         key->setFocus();
  202.     } else if ( page == page2 ) {
  203.         dataChanged( firstName->text() );
  204.         firstName->setFocus();
  205.     } else if ( page == page3 ) {
  206.         finishButton()->setEnabled( TRUE );
  207.         finishButton()->setFocus();
  208.     }
  209. }
  210.  
  211. void Wizard::keyChanged( const QString &text )
  212. {
  213.     QString t = text;
  214.     int p = 0;
  215.     bool on = ( key->validator()->validate(t, p) == QValidator::Acceptable );
  216.     nextButton()->setEnabled( on );
  217. }
  218.  
  219. void Wizard::dataChanged( const QString & )
  220. {
  221.     if ( !firstName->text().isEmpty() &&
  222.          !lastName->text().isEmpty() &&
  223.          !email->text().isEmpty() )
  224.         nextButton()->setEnabled( TRUE );
  225.     else
  226.         nextButton()->setEnabled( FALSE );
  227. }
  228.